package com.zc.datastructure.structure.graph;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: zhuCan
 * @date: 2020/6/27 10:48
 * @description:
 */
@Data
public class Edge<S> {

  // 开始点
  private String prefix;
  // 结束点
  private String suffix;
  // 边中存储的数据
  private List<S> data;
  // 下一条边
  private Edge<S> nextEdge;

  public Edge(String prefix, String suffix, S data) {
    this.prefix = prefix;
    this.suffix = suffix;
    this.data = new ArrayList<>();
    this.data.add(data);
  }

  // 为边添加另一个边
  public void addEdge(Edge<S> current, Edge<S> next) {

    // 如果边重复,则仅添加数据就行
    if (current.equals(next)) {
      current.getData().addAll(next.data);
      return;
    }

    // 递归寻找链表的尾部
    if (current.nextEdge != null) {
      addEdge(current.nextEdge, next);
      return;
    }

    // 向尾部添加数据
    current.setNextEdge(next);

  }

  // 判断是否属于同一个边
  public boolean equals(Edge<S> other) {
    return this.prefix.equals(other.prefix) && this.suffix.equals(other.suffix);
  }
}
